#!/bin/bash

# 设置变量
SDK_ROOT=$(pwd)
ARCHIVE_NAME="sdk_changes_$(date +%Y%m%d_%H%M%S).tar.gz"
TEMP_DIR="/tmp/sdk_changes_temp"

# 创建临时目录
mkdir -p "$TEMP_DIR"

# 函数：归档变更
archive_changes() {
    echo "开始归档变更..."

    # 定义要检查的目录
    local dirs=("buildroot" "kernel" "device/rockchip")

    for dir in "${dirs[@]}"; do
        if [ -d "$dir" ]; then
            echo "检查 $dir 目录..."
            (
                cd "$dir"
                # 获取未跟踪、修改和删除的文件
                git status --porcelain | while read -r status file; do
                    case ${status:0:2} in
                        M | A | ??) # 修改或新增
                            mkdir -p "$TEMP_DIR/$dir/$(dirname "$file")"
                            cp --parents "$file" "$TEMP_DIR/$dir/"
                            ;;
                        D ) # 删除
                            echo "$dir/$file" >> "$TEMP_DIR/deleted_files.txt"
                            ;;
                    esac
                done
            )
        fi
    done

    # 创建归档
    tar -czf "$ARCHIVE_NAME" -C "$TEMP_DIR" .
    echo "变更已归档到 $ARCHIVE_NAME"

    # 清理临时目录
    rm -rf "$TEMP_DIR"
}

# 函数：还原变更
restore_changes() {
    if [ -z "$1" ]; then
        echo "请提供要还原的归档文件名。"
        return 1
    fi

    local archive="$1"

    if [ ! -f "$archive" ]; then
        echo "归档文件 $archive 不存在。"
        return 1
    fi

    echo "开始还原变更..."
    tar -xzf "$archive" -C "$SDK_ROOT"

    # 处理删除的文件
    if [ -f "$SDK_ROOT/deleted_files.txt" ]; then
        while IFS= read -r file; do
            rm -f "$SDK_ROOT/$file"
        done < "$SDK_ROOT/deleted_files.txt"
        rm "$SDK_ROOT/deleted_files.txt"
    fi

    # 配置 Git safe.directory
    echo "配置 Git safe.directory..."
    git config --global --add safe.directory '*'

    echo "变更已还原，Git safe.directory 已配置。"
}

# 主逻辑
case "$1" in
    archive)
        archive_changes
        ;;
    restore)
        restore_changes "$2"
        ;;
    *)
        echo "用法: $0 {archive|restore [归档文件名]}"
        exit 1
        ;;
esac

exit 0
